﻿using System;
using Biz.Check;
using Biz.Status;
using Biz.Utility;

namespace Biz
{
    public abstract class Application : IProduct
    {
        private int id = Define.NEW;

        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        private int? approverID = null;

        public int? ApproverID
        {
            get { return approverID; }
            set { approverID = value; }
        }

        private int? applicantID = null;

        public int? ApplicantID
        {
            get { return applicantID; }
            set { applicantID = value; }
        }

        private int? gaUser = null;

        public int? GaUser
        {
            get { return gaUser; }
            set { gaUser = value; }
        }

        private ApplicationStatus status;

        public ApplicationStatus Status
        {
            get { return status; }
            set { status = value; }
        }
        private CheckList checkList;

        public CheckList CheckList
        {
            get { return checkList; }
            set { checkList = value; }
        }
        private DateTime excuteDate;

        public DateTime ExcuteDate
        {
            get { return excuteDate; }
            set { excuteDate = value; }
        }
        private string remarks = string.Empty;

        public string Remarks
        {
            get { return remarks; }
            set { remarks = value; }
        }
        private string opposite = string.Empty;

        public string Opposite
        {
            get { return opposite; }
            set { opposite = value; }
        }
        private int numOfPerson = 0;

        public int NumOfPerson
        {
            get { return numOfPerson; }
            set { numOfPerson = value; }
        }
        private decimal averageAmount = 0;

        public decimal AverageAmount
        {
            get { return averageAmount; }
            set { averageAmount = value; }
        }
        private decimal totalAmount = 0;

        public decimal TotalAmount
        {
            get { return totalAmount; }
            set { totalAmount = value; }
        }
        private decimal actualFee = 0;

        public decimal ActualFee
        {
            get { return actualFee; }
            set { actualFee = value; }
        }

        public enum ApplicationType
        {
            TREAT,
            PRESENT
        }

        public abstract void save();
        public abstract void load(int _id);
        public abstract string PRODUCT_NAME
        {
            get;
        }
    }
}
